import axios from 'axios';

// 创建axios实例
const api = axios.create({
  baseURL: 'http://localhost:8080/api',
  timeout: 10000,
  headers: {
    'Content-Type': 'application/json'
  }
});

// 获取token的函数
const getToken = (): string | null => {
  if (typeof window === 'undefined') return null;
  
  try {
    const authStorage = localStorage.getItem('auth-storage');
    if (!authStorage) return null;
    
    const authData = JSON.parse(authStorage);
    return authData.state?.token || null;
  } catch (e) {
    console.error('解析token失败:', e);
    return null;
  }
};

// 请求拦截器
api.interceptors.request.use(
  config => {
    // 获取token
    const token = getToken();
    
    if (token) {
      config.headers['Authorization'] = `Bearer ${token}`;
      console.log('添加token到请求头');
    } else {
      console.warn('未找到token，请求可能会被拒绝');
    }
    
    return config;
  },
  error => {
    return Promise.reject(error);
  }
);

// 响应拦截器
api.interceptors.response.use(
  response => {
    console.log('API响应成功:', response.config.url, response.status);
    return response.data;
  },
  error => {
    if (error.response) {
      console.error('API错误:', error.response.status, error.response.data);
      
      // 401错误处理 - 暂时禁用特殊处理，只记录日志
      if (error.response.status === 401) {
        console.warn('未授权访问，可能需要重新登录');
        console.log('401错误详情:', {
          url: error.config.url,
          method: error.config.method,
          headers: error.config.headers,
          data: error.response.data
        });
      }
      
      // 500错误处理
      if (error.response.status === 500) {
        console.warn('服务器内部错误:', {
          url: error.config.url,
          method: error.config.method,
          data: error.response.data
        });
      }
    } else {
      console.error('API请求失败:', error.message);
    }
    
    // 确保错误对象有正确的类型和属性
    if (!error.isAxiosError) {
      const enhancedError = new Error(error.message || '未知错误');
      enhancedError.name = 'ApiError';
      return Promise.reject(enhancedError);
    }
    
    return Promise.reject(error);
  }
);

// 检查是否已认证的辅助函数
export const isAuthenticated = (): boolean => {
  return !!getToken();
};

export default api; 